# \section*{题目：单步二叉树模型计算}
# 设某股票当前价格 $S_0 = 100$ 元，年化波动率 $\sigma = 20\%$，无风险年利率 $r = 5\%$（连续复利）。考虑一个期限为6个月的欧式看涨期权，行权价 $K = 105$ 元。

# \textbf{问题}：
# \begin{enumerate}
#     \item 使用二叉树模型，将期权期限划分为一步（$\Delta t = 0.5$ 年），计算上涨因子 $u$ 和下跌因子 $d$。
#     \item 计算风险中性概率 $q$。
#     \item 构建价格二叉树，并计算期权在到期日的可能 payoff。
#     \item 使用倒推法计算该欧式看涨期权的当前理论价格。
# \end{enumerate}


import numpy as np

S=100
sigma=0.2
r=0.05
T=0.5
K=105

# (a)
u=np.exp(sigma*np.sqrt(T))
d=np.exp(-sigma*np.sqrt(T))
print(f'上涨因子为u={u:.4f}')
print(f'下跌因子为d={d:.4f}')

# (b)
q=(np.exp(r*T)-d)/(u-d)
print(f'风险中性概率为q={q:.4f}')

# (c)
Su=S*u
Sd=S*d
Cu=np.max([Su-K,0])
Cd=np.max([Sd-K,0])
print(f'上涨状态股票价格为Su={Su:.4f}')
print(f'下跌状态股票价格为Sd={Sd:.4f}')
print(f'上涨状态欧式看涨期权payoff为Cu={Cu:.4f}')
print(f'下跌状态欧式看涨期权payoff为Cd={Cd:.4f}')

# (d)
C=np.exp(-r*T)*(q*Cu+(1-q)*Cd)
print(f'欧式看涨期权的当前价格为C={C:.4f}')

